package com.mef.smsplat.service;



import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.mef.smsplat.dao.TempLabelInfoDao;
import com.mef.smsplat.dao.TemplateInfoDao;
import com.mef.smsplat.dao.base.DataGridModel;
import com.mef.smsplat.dao.base.EntityDao;
import com.mef.smsplat.dao.base.Page;
import com.mef.smsplat.domain.TempLabelInfoDomain;
import com.mef.smsplat.domain.TemplateInfoDomain;
import com.mef.smsplat.exception.BusinessException;
import com.mef.smsplat.service.base.BaseService;
import com.mef.smsplat.web.controller.qo.TemplateQo;

@Service
@Transactional
public class TemplateInfoService extends BaseService<TemplateInfoDomain, String> {

	private TemplateInfoDao templateInfoDao;
	private TempLabelInfoDao tempLabelInfoDao;

	public void setTemplateInfoDao(TemplateInfoDao templateInfoDao) {
		this.templateInfoDao = templateInfoDao;
	}

	public void setTempLabelInfoDao(TempLabelInfoDao tempLabelInfoDao) {
		this.tempLabelInfoDao = tempLabelInfoDao;
	}


	@Override
	public EntityDao getEntityDao() {
		return this.templateInfoDao;
	}
	
	@Transactional(readOnly=true)
	public Page<TemplateInfoDomain> query(TemplateQo qo,DataGridModel dgm){
		return templateInfoDao.query(qo, dgm);
	}
	
	public void updateStatus(String[] ids,int status){
		for(int i=0;i<ids.length;i++){
			TemplateInfoDomain temp=templateInfoDao.getById(ids[i]);
			temp.setStatus(status);
			templateInfoDao.update(temp);//更新
		}
	}

	/**
	 * 保存模版+模版的标签
	 * @param entity
	 * @param tempLabels
	 * @throws DataAccessException
	 */
	public void save(TemplateInfoDomain entity,TempLabelInfoDomain[] tempLabels) throws DataAccessException {
		TemplateInfoDomain domain=templateInfoDao.query(entity.getTemplateName());
		if(domain!=null)
			throw new BusinessException("名称为"+entity.getTemplateName()+"的模版已经存在");
		
		templateInfoDao.save(entity);
		
		for(int i=0;i<tempLabels.length;i++){
			tempLabelInfoDao.save(tempLabels[i]);
		}
		
		
	}

	public void update(TemplateInfoDomain entity,TempLabelInfoDomain[] tempLabels) throws DataAccessException {
		TemplateInfoDomain domain=templateInfoDao.query(entity.getTemplateName());
		if(domain!=null&&!domain.getTemplateId().equals(entity.getTemplateId()))
			throw new BusinessException("名称为"+entity.getTemplateName()+"的模版已经存在");
		
		templateInfoDao.update(entity);
		
		//更新标签信息
		tempLabelInfoDao.delete(entity.getTemplateId());//先删除原来的
		for(int i=0;i<tempLabels.length;i++){//再增加新的
			tempLabelInfoDao.save(tempLabels[i]);
		}
	}

	@Override
	public void removeById(String[] ids) throws DataAccessException {
		
		super.removeById(ids);
		
		for(int i=0;i<ids.length;i++){
			tempLabelInfoDao.delete(ids[i]);//循环删除其标签
		}
	}
	
	/**
	 * 根据模版查询标签
	 * @param templateId
	 * @return
	 */
	public List<TempLabelInfoDomain> queryLabel(String templateId){
		return tempLabelInfoDao.query(templateId);
	}
	
	

}
